package com.shenma2009.controller;

import lombok.extern.slf4j.Slf4j;
import org.apache.hadoop.hbase.NamespaceDescriptor;
import org.apache.hadoop.hbase.client.Admin;
import org.apache.hadoop.hbase.client.Connection;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

import java.io.IOException;

/**
 * @author 军哥
 * @version 1.0
 * @description: TestHbaseController
 * @date 2023/5/25 15:40
 */

//@RestController
@RequestMapping(value = "/hbase")
@Slf4j
public class TestHbaseController {

    @Autowired
    private Connection connection;

    @GetMapping(value = "/createNameSpace")
    public String createNameSpace() {
        String namespace = "student001";

        try {
            // 1. 获取 admin
            // 此处的异常先不要抛出 等待方法写完 再统一进行处理
            // admin 的连接是轻量级的 不是线程安全的 不推荐池化或者缓存这个连接
            Admin admin = connection.getAdmin();

            // 2. 调用方法创建命名空间
            // 代码相对 shell 更加底层 所以 shell 能够实现的功能 代码一定能实现
            // 所以需要填写完整的命名空间描述

            // 2.1 创建命令空间描述建造者 => 设计师
            NamespaceDescriptor.Builder builder =
                    NamespaceDescriptor.create(namespace);

            // 2.2 给命令空间添加需求
            builder.addConfiguration("user","shenmazong");
            // 2.3 使用 builder 构造出对应的添加完参数的对象 完成创建
            // 创建命名空间出现的问题 都属于本方法自身的问题 不应该抛出

            admin.createNamespace(builder.build());

            // 3. 关闭 admin
            admin.close();
        } catch (IOException e) {
            System.out.println("命令空间已经存在");
            e.printStackTrace();
        } finally {

        }

        return "ok";
    }
}
